/****************************
 * 权限验证
 ****************************/

(function () {

    exports.permissionValidation = function(req,res,permission,callback){

        //获取用户ID
        var userId = req.headers.managerEndpointId;

        if(userId == undefined){
            return RES.response(res,false,"缺少必传参数userid");
        }

        /*//获取机构iD
        var oesId = 682;*/

        if(oesId == undefined){
            return RES.response(res,false,"缺少必传参数oesid");
        }

        //用户所拥有的权限
        var permissionData = [];

        //用户角色ID
        var roleId = 0;

        //是否为超管
        var isAll  = 0;

        //任务流创建
        async.waterfall([

            //获取用户的角色
            function(cb){

                R.SEND_HTTP(
                    req,
                    {
                       // url    : CORE_APIConfig.coreAPI.userSearchRole.Request_Api_Url + "/our_ouid/" + userId,
                        url    : "http://127.0.0.1:3500/erpUser/searchRole/our_ouid/" + userId,
                        method : 'POST',
                        data   : {
                            fields : "our_orid"
                        }

                    },

                    function (err, data) {


                        if(err){
                            return RES.response(res,false,"用户操作权限验证失败1");
                        }

                        roleId = data.data[0].our_orid;


                        cb();

                    }
                );

            },

            //查询是否为超级管理员权限
            function(cb){

                R.SEND_HTTP(
                    req,
                    {
                       // url    : CORE_APIConfig.coreAPI.roleSearch.Request_Api_Url + "/or_id/" + roleId,
                        url    : "http://127.0.0.1:3500/erpRole/search/or_id/" + roleId,
                        method : 'POST',
                        data   : {
                            fields : "or_isAll"
                        }

                    },

                    function (err, data) {

                        if(err){
                            return RES.response(res,false,"用户操作权限验证失败2");
                        }

                        isAll = data.data[0].or_isAll;

                        if(isAll == 0){

                            cb();

                        }else{

                            return callback();

                        }

                    }
                );



            },

            //获取用户的权限接口表
            function(cb){

                if(roleId < 0){
                    return cb();
                }
                console.log("roleid:" + roleId)
                R.SEND_HTTP(
                    req,
                    {
                       // url    : CORE_APIConfig.coreAPI.permissionSearch.Request_Api_Url + "/op_orid/" + roleId,
                        url    : "http://127.0.0.1:3500/erpPermission/search/oi_type/1/op_orid/" + roleId,
                        method : 'POST',
                        data   : {
                            fields : "oi_name"
                        }

                    },

                    function (err, data) {

                        if(err){
                            return RES.response(res,false,"用户操作权限验证失败3");
                        }

                        permissionData = data.data;
                        cb();

                    }
                );

            },

            //查看是否有该权限
            function(cb){

                if(roleId < 0){
                    return cb();
                }

                var permissionArr = [];

                //将权限结果转化为纯数组
                for(var i = 0;i<permissionData.length;i++){
                    permissionArr.push("http://127.0.0.1/YiMoFang_Core_Api_Server"+permissionData[i].oi_name);
                }

                var permissionValue = common.intersect(permission,permissionArr);


                if( JSON.stringify(permissionValue.sort()) != JSON.stringify(permission.sort()) ) {

                    return RES.response(res,false,"抱歉，您没有权限进行本操作");
                }

                cb();

            },

        ],function(err, result){

            callback();

        });

    }


}).call(this);